package org.s3.project.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;
import org.s3.project.common.JwtUtils;
import org.s3.project.common.R;
import org.s3.project.entity.User;
import org.s3.project.service.UserService;
import org.s3.project.util.AliOSSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.checkerframework.checker.units.qual.A;
import org.s3.project.entity.User;
import org.s3.project.service.UserService;
import org.s3.project.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.awt.*;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author cfx
 * @version 1.0
 * @Description
 * @date 2025/2/9 9:35
 */
@CrossOrigin(origins = "*")
@RestController
public class UserController {

    @Autowired
    private UserService userService;
    @Autowired
    private AliOSSUtils aliOSSUtils;

    /**
     * 分页查询用户信息
     * @param page 当前页码
     * @param pageSize 每页显示条数
     * @return 用户信息列表
     */
    @GetMapping("show/{page}")
    public R selectUserPage(@PathVariable("page")int page, Integer pageSize,
                            @RequestParam(required = false)String name,
                            @RequestParam(required = false) String create_time,
                            @RequestParam(required = false) String create_timeOne){
        PageHelper.startPage(page,pageSize);//设置分页
        List<User> userList= this.userService.selectUserLike(name,create_time,create_timeOne);//对于mylist1连表查询的分页id集合
        PageInfo<User> userPageList = new PageInfo<>(userList);//执行连表查询
        return new R().add("userPageList",userPageList);
    }
    //根据用户id查询用户信息
    @GetMapping("showUser/{id}")
    public User selectUserById(@PathVariable("id")int id){
        return userService.getUserById(id);
    }


    //用户登录
    @PostMapping("/login")
    public User login(String username,String password){
        return userService.login(username,password);
    }

    /**
     * 删除用户
     * @param id 用户id
     * @return 删除结果
     */
    @GetMapping("deleteUserId")
    public int deleteUser(int id){
        return userService.deleteUser(id);

    }
    /**
     * 修改用户信息
     * @param user 用户对象
     * @return 修改结果
     */
    @GetMapping("updateUser")
    public int updateUser(User user,@RequestHeader("token") String token){
        Integer adminId= JwtUtils.getJwtToken(token,"adminId");
        user.setUpdate_user(adminId);//设置修改人id为当前登录用户的id
        return userService.updateUser(user);
    }

    /**
     * 修改用户状态
     * @param user 用户对象
     * @return 修改结果
     */
    @GetMapping("updateUserStatus")
    public int updateUserStatus(User user,@RequestHeader("token") String token){
        Integer adminId= JwtUtils.getJwtToken(token,"adminId");
        user.setUpdate_user(adminId);//设置修改人id为当前登录用户的id
        return userService.updateUserStatus(user);
    }
    /**
     * 批量删除用户
     * @param ids 用户id数组
     */
    @GetMapping("deleteUserIds")
    public int deleteUsers(int[] ids) {
        return userService.deleteUsers(ids);
    }

    /**
     * 添加用户
     * @param user 用户对象
     * @return 添加结果
     */
    @GetMapping("addUser")
    public int addUser(User user,@RequestHeader("token") String token) {
        Integer adminId= JwtUtils.getJwtToken(token,"adminId");
        user.setCreate_user(adminId);//设置修改人id为当前登录用户的id
        user.setUpdate_user(adminId);//设置修改人id为当前登录用户的id
        return userService.addUser(user);
    }

    //修改头像
    @PostMapping("updateUserImg/{avatar}/{id}")
    public int updateUserImg(@PathVariable("avatar") String avatar,@PathVariable("id") Integer id){
        return userService.updateUserAvatar(avatar,id);
    }



    @PostMapping("addUserImg")
    public String addUserImg(@RequestParam("file") MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());
        return  aliOSSUtils.upload(file);
    }

    /**
     *
     * 获取用户总数
     * @return 用户总数
     */
    @GetMapping("getUserCount")
    public Map<String, Object> getUserCount() {
        long userCount = userService.count();
        Map<String, Object> result = new HashMap<>();
        result.put("userCount", userCount);
        return result;
    }



    /**
     * 插入新用户
     * 该方法通过POST请求接收用户信息，并将其插入到数据库中
     * 使用HTTP POST方法是因为此操作会修改服务器端的状态（增加新用户）
     *
     * @param user 要插入的用户信息，以JSON格式通过请求体（RequestBody）传递
     * @return 返回插入操作的影响行数，通常为1表示成功，0表示失败
     */
    @PostMapping("/insetUser")
    public boolean insertUser(@RequestBody User user){
        return userService.save(user);
    }
}
